package com.cskaoyan.charstream.simple;

import java.io.*;

/*
        在使用转化流的时候，通常需要经过2步：
        1.创建底层的字节流
        2.包装字节流，指定字符集并完成转换流的创建

        稍显麻烦，而大多数时候，我们所依赖的字符集都是默认字符集，
        所以，为了简化我们的书写，转换流提供了对应的子类。

        构造方法
        FileWriter
           1.用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。
           2.要自己指定这些值，可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

             public FileWriter(String fileName)
             // 第二个参数传true，表示实现追加写入
             public FileWriter(String fileName, boolean append)

        FileReader
           1.用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。
           2.要自己指定这些值，可以先在 FileInputStream 上构造一个 InputStreamReader。
             public FileReader(String fileName)
             public FileReader(File file)

       对比： 转化流  VS 文件字符流
       a. 文件字符流，流对象创建简单，但是无法指定编解码所基于的字符集
       b. 转化流，创建对象麻烦，只有使用转化流，才能使用编解码所基于的字符集


 */
public class Demo1 {

    public static void main(String[] args) throws IOException {

        // 创建转化流对象
        //FileInputStream fileInputStream = new FileInputStream("a.txt");
        //Reader reader = new InputStreamReader(fileInputStream);
        //InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("a.txt"));


        // 又因为，大部分情况下我们不需要制定字符集(使用默认字符集)，为了创建流对象简单一些

        // 先创建字符流对象
        Writer fileWriter = new FileWriter("b.txt");
        Reader fileReader = new FileReader("a.txt");


        // 字符流完成复制
        int count;
        char[] charBuf = new char[1024];

        while ((count = fileReader.read(charBuf)) != -1) {

            fileWriter.write(charBuf, 0, count);
        }

        //关闭流
        fileReader.close();
        fileWriter.close();










    }
}
